Tengo este simple servidor de back-end Express.js :
const app = require("express")(); const dotenv = require("dotenv"); const bodyParser = require("body-parser"); const cookieParser = require("cookie-parser"); const swaggerUi = require("swagger-ui-express"); const swaggerJsDocs = require("swagger-jsdoc"); const swaggerOptions = { definition: { openapi: '3.0.0', info: { title: 'API', version: '0.0.1', description: 'Api docs .' }, }, apis: ["./src/swagger/swagger.yaml"] }; const swaggerDocs = swaggerJsDocs(swaggerOptions); dotenv.config(); const server = require("http").createServer(app); app.use(cookieParser()); app.use(bodyParser.json({limit: '10MB'})); app.use(bodyParser.urlencoded({extended: true})); app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerDocs)); app.use("/", require('./src/routes')); const port = process.env.PORT || 3001; server.listen(port, () => console.log("API listening on port " + port + "!"));Pero sigo recibiendo esta advertencia y en realidad no tengo idea de cuál es el motivo. No tengo sockets web o algo así, pero aún así:
(node:7847) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 uncaughtException listeners added to [process]. Use emitter.setMaxListeners() to increase limitEse error específico significa que su código (o los módulos que está utilizando) han agregado 11 controladores para el evento process.on('uncaughtException', ...) .
Esto suele ser una indicación de que algún código agrega repetidamente el mismo controlador de eventos una y otra vez (en algún otro controlador de eventos, como dentro de una ruta Express) donde se acumulan más y más para siempre. Esto podría estar en su propio código o en algún módulo que importe su código.
Los controladores de eventos como este deben agregarse solo una vez para una sección determinada de código o deben agregarse y luego eliminarse cuando ya no se necesiten.
Según la pequeña cantidad de código que muestra aquí, supongo que el primer lugar para buscar sería en ./src/routes para cualquier código que agregue un uncaughtException de excepción no capturada en uno de sus controladores de ruta.
He encontrado la razón de esta advertencia.
En este proyecto, uso winston y winston-daily-rotate-file , para cada controlador y servicio (para escribir registros) creo esta instancia de registrador, y básicamente esto crea esos controladores:
const loggerInstance = createLogger({ level: process.env.NODE_ENV !== 'production' ? 'debug' : 'info', format: combine( colorize(), json(), label({ label: data.label ? data.label : 'NONE' }), timestamp(), myFormat, ), transports: transportsConfig, }); if (process.env.NODE_ENV !== 'production') { loggerInstance.add(new transports.Console({ handleExceptions: true, })); } if (process.env.DISABLE_LOGGER === 'yes') { loggerInstance.silent = true; } return loggerInstance;